package org.cybzacg.encryption.annotations;

import org.cybzacg.encryption.enums.EncryptionAlgorithm;
import org.cybzacg.encryption.enums.EncryptionType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 加密注解
 * 用于标记需要加密的字段、方法参数或返回值
 * 
 * @author encryption team
 * @version 1.0
 */
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Encrypt {
    
    /**
     * 加密算法
     * 默认为AES
     * 
     * @return 加密算法
     */
    EncryptionAlgorithm algorithm() default EncryptionAlgorithm.AES;
    
    /**
     * 加密类型
     * 默认为对称加密
     * 
     * @return 加密类型
     */
    EncryptionType type() default EncryptionType.SYMMETRIC;
    
    /**
     * 密钥长度
     * 默认为256位
     * 
     * @return 密钥长度
     */
    int keySize() default 256;
    
    /**
     * 转换字符串
     * 
     * @return 转换字符串
     */
    String transformation() default "";
    
    /**
     * 提供者
     * 
     * @return 提供者
     */
    String provider() default "";
    
    /**
     * 是否启用缓存
     * 
     * @return 是否启用缓存
     */
    boolean cacheEnabled() default true;
    
    /**
     * 缓存过期时间（毫秒）
     * 
     * @return 缓存过期时间
     */
    long cacheExpiration() default 300000; // 5分钟
    
    /**
     * 是否启用监控
     * 
     * @return 是否启用监控
     */
    boolean monitoringEnabled() default true;
    
    /**
     * 超时时间（毫秒）
     * 
     * @return 超时时间
     */
    long timeout() default 15000; // 15秒
    
    /**
     * 最大重试次数
     * 
     * @return 最大重试次数
     */
    int maxRetries() default 3;
    
    /**
     * 重试间隔（毫秒）
     * 
     * @return 重试间隔
     */
    long retryInterval() default 1000; // 1秒
    
    /**
     * 自定义属性
     * 
     * @return 自定义属性
     */
    String[] properties() default {};
}
